8장 커밋 이력 조작


다른 브랜치의 커밋을 작업 브랜치에 추가하기 : git cherry-pick

병합하는 대신에 다른 브랜치의 커밋을 선택적으로 작업 브랜치에 추가할 때 사용
git cherry-pick "추가하려는 커밋 체크섬"

❓ 어떨 때 사용하나

이전 커밋으로 작업 브랜치의 최종 커밋 변경하기 : git reset

이미 생성된 커밋을 취소하고 이전 커밋으로 최종 커밋을 변경.
git reset "이전 커밋 체크섬"

변경 사항 되돌리는 커밋 생성하기 : git revert

이미 생성된 커밋 취소하고 변경사항 되돌리는 새로운 커밋을 생성함.
git rever "되돌리려는 커밋 체크섬"

git reset 이용하면 커밋 자체를 커밋 이력에서 제외하지만, git revert 는 커밋의 변경 사항을 되돌렸다는 새로운 커밋을 커밋 이력에 생성.

git reset 이 커밋 이력이 깔끔하게 유지되는 것 가지만, 협업할 때는 작업을 되돌리는 이력을 확인할 수 있도록 git revert 를 사용하는 편이 좋다.

브랜치 커밋 이력 재정렬하기 : git rebase

git rebase "재정렬을 위한 기준 브렌치"

그냥 브랜치 병합

git checkout main
git merge test/test

*   0b19204f328972d36484205a70b60bf80360a4d5 (HEAD -> main) Merge branch 'test/test' into main
|\
| * 7476f365fe334ae6f2fa0bc7846e0fdf4f7ff781 (test/test) test rebase2

브랜치 커밋 이력 재정렬후 병합

main 기준으로 test/test 브랜치를 재정렬했다.

git checkout test/test
git commit "test rebase3" --allow-empty
git log --pretty=online --graph
>>
* 9e937c0cb5b8a6a84729ca0e5e38ccb1324d190a (HEAD -> test/test) test rebase3
git chekcout main
git merge test/test
git log --pretty=online --graph
>>
* 9e937c0cb5b8a6a84729ca0e5e38ccb1324d190a (HEAD -> main, test/test) test rebase3